spark源码:https://github.com/apache/spark/archive/v2.2.2.zip
scala的构造器、主构造器和附属构造器
主构造器用clclass定义,附属构造器用def定义名称为this(),
在附属构造器的第一行必须调用主构造器和其他附属构造器。
1 | /** |
抽象类和抽象方法
在抽象类中定义的方法如果没有方法体,那么在子类中必须重写该方法
1 | abstract class Animal { |
半生类和半生对象,当class定义的类名和object定义的名称相同的时候,class定义的叫做objec 对象的伴生类,object定义的叫做class的陪伴生对象。
一般在object里面定义一个apply方法,该方法通常的作用是new 一个类对象。如何判断是class的apply还是object的apply方法?
class的对象在spark的源码中调用apply方法的时候对象都是小写的
object一般都是大写的,用大写的object名称调用apply方法,即大写开头调object 小写开头调class
1 | class Student(name: String, age: Int) { |
样例类
样例类 用case class 来修定义样例类,可以当做静态来理解,用Dog()这种方式使用
与object 不同的是object 调用的时候直接是名称Dog.xxx 而caseclass则是Dog().xxx
特点是不用new可以直接使用,并且在spark sql中使用的比较多
1 | object CaseClassApp { |
Trait
实现Trait和abstract的时候都用extends 当有多个的时候第一个用extends,后面的用with
1 | object TraitApp { |
scala中的数组Array
1 | 第一种方式定义数组 |
变长数组(声明泛型)
1 | val arr2 = ArrayBuffer[Int]() |
Scala中的List
Scala 中的 List 和 Java List 不一样,在 Java 中 List 是一个接口,真正存放数据是 ArrayList,而 Scala 的 List
可以直接存放数据,就是一个 object,默认情况下 Scala 的 List 是不可变的,List 属于序列 Seq。
创建List
val list1 = List(1, 2, 3)
- List 默认为不可变的集合
- List 在 scala 包对象声明的,因此不需要引入其它包也可以使用
- val List = scala.collection.immutable.List
- List 中可以放任何数据类型,比如 arr1 的类型为 List[Any]
- 如果希望得到一个空列表,可以使用 Nil 对象, 在 scala 包对象声明的,因此不需要引入其它包也可以使用
向列表中增加元素, 会返回新的列表/集合对象。注意:Scala 中 List 元素的追加形式非常独特,和 Java 不一样。
List的语法糖操作如下
1 | val list1 = List(1, 2, 3) |
ListBuffer
// ListBuffer 的创建
val buffer = ListBufferString
// 添加单个元素
buffer.append(“Hadoop”)
buffer.append(“HDFS”)
// 在指定位置添加元素
buffer.insert(0,“Shell”)
// 在指定位置添加一个List
buffer.insertAll(0,List(“Kafka”,“Hive”))
// 删除指定位置的元素
buffer.remove(0)
// 更新指定位置的元素
buffer.update(0,“HIVE”)
// 获取buffer的头部
println(buffer.head)
// 获取buffer的尾部
println(buffer.tail)
// 获取buffer的大小
println(buffer.length)
println(buffer.size)
// 清空buffer
buffer.clear()